/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.be;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.cip.esymons.general.be.ConsejoDepartamental;
import org.cip.esymons.general.be.Solicitante;
import org.cip.esymons.general.util.Utiles;

/**
 *
 * @author oscar
 */
@Entity
@Table(name = "eca_contrato")
//@NamedQueries({@NamedQuery(name = "Contrato.findAll", query = "SELECT c FROM Contrato c"), @NamedQuery(name = "Contrato.findByConCodigo", query = "SELECT c FROM Contrato c WHERE c.conCodigo = :conCodigo"), @NamedQuery(name = "Contrato.findByConContratante", query = "SELECT c FROM Contrato c WHERE c.conContratante = :conContratante"), @NamedQuery(name = "Contrato.findByCodmontoTotal", query = "SELECT c FROM Contrato c WHERE c.codmontoTotal = :codmontoTotal"), @NamedQuery(name = "Contrato.findByConsubTotal", query = "SELECT c FROM Contrato c WHERE c.consubTotal = :consubTotal"), @NamedQuery(name = "Contrato.findByConIGV", query = "SELECT c FROM Contrato c WHERE c.conIGV = :conIGV"), @NamedQuery(name = "Contrato.findByConfechaContrato", query = "SELECT c FROM Contrato c WHERE c.confechaContrato = :confechaContrato"), @NamedQuery(name = "Contrato.findByConTipo", query = "SELECT c FROM Contrato c WHERE c.conTipo = :conTipo")})
public class Contrato implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "con_codigo", nullable = false)
    private Integer conCodigo;
    @Basic(optional = false)
    @Column(name = "cod_montoTotal", nullable = false, precision = 10, scale = 4)
    private Double codmontoTotal;
    @Basic(optional = false)
    @Column(name = "con_subTotal", nullable = false, precision = 10, scale = 4)
    private Double consubTotal;
    @Column(name = "con_apagar", nullable = false, precision = 10, scale = 4)
    private Double conApagar;
    @Basic(optional = false)
    @Column(name = "con_IGV", nullable = false, precision = 10, scale = 4)
    private Double conIGV;
    @Column(name = "con_descuento", nullable = false, precision = 10, scale = 4)
    private Double condescuento;
    @Column(name = "con_fechaContrato")
    @Temporal(TemporalType.DATE)
    private Date confechaContrato;
    @Column(name = "con_garantia")
    private Double conGarantia;
    @Column(name = "con_tipo")
    private Boolean conTipo;//0=PN,1=PJ
    @Column(name = "con_estado")
    private Integer conEstado;//0=Anulado,1=Sin Pagar,2=Pagado, 3=Confirmado
    @Column(name = "con_nombreEvento", nullable = false, length = 50)
    private String conNombreEvento;
    @Column(name = "con_devuelto")
    private Boolean conDevuelto;//0=No se devolvio la garantia, 1=Garantia devuelta
    @Column(name = "con_tipoDscto")
    private Integer conTipoDscto;
    @JoinColumn(name = "sol_codigo", referencedColumnName = "sol_codigo", insertable = true, updatable = true)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Solicitante solCodigo;
//    @Column(name = "con_estado")
//    private String ncoCodigo;
    @Column(name = "con_numero")
    private String conNumero;
    @Column(name = "con_vencimiento")
    @Temporal(TemporalType.DATE)
    private Date conVencimiento;
    @Column(name = "con_pagoParcial")
    private Boolean conPagoParcial;
    @Column(name = "con_tipoMoneda")
    private Long conTipoMoneda;
    
    @Transient
    private String recursos;
    @Transient
    private ConsejoDepartamental consejo;
    @Transient
    private String fechaInicio;
    @Transient
    private String fechaFin;
    @Transient
    private String contratante;
    @Transient
    private String estado;

    public Contrato() {
    }

    public Contrato(Integer conCodigo) {
        this.conCodigo = conCodigo;
    }

    public String getConNumero() {
        return conNumero;
    }

    public void setConNumero(String conNumero) {
        this.conNumero = conNumero;
    }

    public Boolean getConDevuelto() {
        return conDevuelto;
    }

    public void setConDevuelto(Boolean conDevuelto) {
        this.conDevuelto = conDevuelto;
    }

    public Integer getConTipoDscto() {
        return conTipoDscto;
    }

    public void setConTipoDscto(Integer conTipoDscto) {
        this.conTipoDscto = conTipoDscto;
    }

    public Date getConVencimiento() {
        return (conVencimiento != null) ? conVencimiento : new Date();
    }

    public void setConVencimiento(Date conVencimiento) {
        this.conVencimiento = conVencimiento;
    }

    public Boolean getConPagoParcial() {
        return conPagoParcial;
    }

    public void setConPagoParcial(Boolean conPagoParcial) {
        this.conPagoParcial = conPagoParcial;
    }

    public Long getConTipoMoneda() {
        return conTipoMoneda;
    }

    public void setConTipoMoneda(Long conTipoMoneda) {
        this.conTipoMoneda = conTipoMoneda;
    }

    


    public Contrato(Integer conCodigo, Double codmontoTotal, Double consubTotal, Double conIGV) {
        this.conCodigo = conCodigo;
        this.codmontoTotal = codmontoTotal;
        this.consubTotal = consubTotal;
        this.conIGV = conIGV;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getContratante() {
        return contratante;
    }

    public void setContratante(String contratante) {
        this.contratante = contratante;
    }

    public String getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(String fechaFin) {
        this.fechaFin = fechaFin;
    }

    public String getFechaContrato() {
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
        String fec = "";
        fec = format.format(confechaContrato);
        return fec;
    }

    public String getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(String fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public ConsejoDepartamental getConsejo() {
        return consejo;
    }

    public void setConsejo(ConsejoDepartamental consejo) {
        this.consejo = consejo;
    }

    public String getRecursos() {
        return recursos;
    }

    public void setRecursos(String recursos) {
        this.recursos = recursos;
    }

    public Double getConGarantia() {
        return conGarantia;
    }

    public void setConGarantia(Double conGarantia) {
        this.conGarantia = conGarantia;
    }

    public Double getConApagar() {
        return conApagar;
    }

    public void setConApagar(Double conApagar) {
        this.conApagar = conApagar;
    }

    public Integer getConEstado() {
        return conEstado;
    }

    public void setConEstado(Integer conEstado) {
        this.conEstado = conEstado;
    }

    public String getEstadoContrato() {
        String retorno = "";
        switch (conEstado) {
            case 0: retorno = "ANULADO";        break;
            case 1: retorno = "SIN CONFIRMAR";  break;
            case 2: retorno = "PAGADO";         break;
            case 3: retorno = "CONFIRMADO";     break;
        }
        return retorno;
    }

    public Double getSubTotalRedondeado() {
        consubTotal = (consubTotal != null) ? consubTotal : 0D;
        Double subTotal = Utiles.redondearDouble(consubTotal, 2);
        return Utiles.truncarDouble(subTotal, 2);
    }

    public Double getIgvRedondeado() {
        conIGV = (conIGV != null) ? conIGV : 0D;
        Double igv = Utiles.redondearDouble(conIGV, 2);
        return Utiles.truncarDouble(igv, 2);
    }

    public Double getMontoTotalTruncado() {
        codmontoTotal = (codmontoTotal != null) ? codmontoTotal : 0D;
        Double montoTotal = Utiles.redondearDouble(codmontoTotal, 2);
        return Utiles.truncarDouble(montoTotal, 2);

    }

    public Double getMontoAPagarRedondeado() {
        conApagar = (conApagar != null) ? conApagar : 0D;
        return Utiles.redondearDouble(conApagar, 2);
    }

    public Integer getConCodigo() {
        return conCodigo;
    }

    public void setConCodigo(Integer conCodigo) {
        this.conCodigo = conCodigo;
    }

    public String getConNombreEvento() {
        return conNombreEvento;
    }

    public void setConNombreEvento(String conNombreEvento) {
        this.conNombreEvento = conNombreEvento;
    }

    public Double getCondescuento() {
        if (conTipoDscto == 0) {
            condescuento = 0D;
        }
        return condescuento;
    }

    public void setCondescuento(Double condescuento) {
        this.condescuento = condescuento;
    }

    public Double getCodmontoTotal() {
        return codmontoTotal;
    }

    public void setCodmontoTotal(Double codmontoTotal) {
        this.codmontoTotal = codmontoTotal;
    }

    public Double getConsubTotal() {
        return consubTotal;
    }

    public void setConsubTotal(Double consubTotal) {
        this.consubTotal = consubTotal;
    }

    public Double getConIGV() {
        return conIGV;
    }

    public void setConIGV(Double conIGV) {
        this.conIGV = conIGV;
    }

    public Date getConfechaContrato() {
        return confechaContrato;
    }

    public void setConfechaContrato(Date confechaContrato) {
        this.confechaContrato = confechaContrato;
    }

    public Boolean getConTipo() {
        return conTipo;
    }

    public void setConTipo(Boolean conTipo) {
        this.conTipo = conTipo;
    }

    public Solicitante getSolCodigo() {
        return solCodigo;
    }

    public void setSolCodigo(Solicitante solCodigo) {
        this.solCodigo = solCodigo;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (conCodigo != null ? conCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Contrato)) {
            return false;
        }
        Contrato other = (Contrato) object;
        if ((this.conCodigo == null && other.conCodigo != null) || (this.conCodigo != null && !this.conCodigo.equals(other.conCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.cip.esymons.eventos.be.Contrato[conCodigo=" + conCodigo + "]";
    }
}
